package com.edu.service.handler;

import com.edu.service.UserService;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.util.Date;

/*
 * @Author:mx
 * @Date:2025/11/10-10:58:10
 */
/*
 *   自定义调度处理器
 *       作用是 告知 代理对象，该如何强化 被代理对象
 *
 *           1. 实现 InvocationHandler 接口
 *           2. 传入 被代理对象 。强化 任意一种类型所以 用的是 Object 而不是具体类型
 *           3. 重写
 *
 * */
public class LogHandler implements InvocationHandler {

    private Object target;//这个属性代表了 被代理对象

    public LogHandler(Object o) {
        this.target = o;
    }

    /*
     *       invoke方法中
     *          proxy 代表生成的 代理对象
     *          method 代表 要执行的方法
     *          args 代表 方法被生要执行传入的参数
     *          Object 代表 方法最终的返回值
     * */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

        if (method.getName().startsWith("select")) { //确定了切点
            try {
                System.out.println("环绕前置");
                System.out.println("前置通知");
                Object o = method.invoke(target, args);//原始方法的执行
                System.out.println("后置返回通知");
                System.out.println("环绕后置");
                return o;
            } catch (Exception e) {
                //afterExceptionAdvise();
                System.out.println("后置异常通知");
            } finally {
                //afterAdvise();
                System.out.println("后置通知");
            }

        }


        Object o = method.invoke(target, args);
        return o;
    }
}
